#ifndef CAMERA_H_INCLUDED
#define CAMERA_H_INCLUDED

#include "uncopyable.h"
#include "geom.h"

class Entity;

class Camera : private Uncopyable {
public:
    Camera(const Vector3& position);
    Camera();
	Vector3 m_position;

    void setPosition(const Vector3& position);
	Vector3 getPosition() const { return m_position; }
    void yaw(const float degrees);
    void pitch(const float degrees);
    void apply(int);

	void getPosition(float* loc) { 
		loc[0] = m_position.x;
		loc[1] = m_position.y;
		loc[2] = m_position.z;
	}
    void attachTo(Entity* entity)
    {
        m_attachedEntity = entity;
    }
private:
    Vector3 m_up;
    Vector3 m_right;
    Vector3 m_forward;
    Vector3 m_lookAt;
	Vector3 m_offset;

    float m_yaw;
    float m_pitch;

    Entity* m_attachedEntity;
	int mode;

};

#endif // CAMERA_H_INCLUDED
